# =============================================================================
# SSH 配置文件 - 备份远程同步专用
# 由 Ansible backup 角色自动生成
# 用于配置备份系统与远程服务器的 SSH 连接参数
# =============================================================================

{% if backup_remote_rsync_enabled | default(false) %}
# 远程备份服务器配置 - 主要的远程备份目标服务器
Host {{ backup_remote_rsync_host | default('backup-server') }}
    HostName {{ backup_remote_rsync_host }}                                    # 远程服务器主机名或IP地址
    Port {{ backup_remote_rsync_port | default(22) }}                          # SSH 连接端口号
    User {{ backup_remote_rsync_user | default('backup') }}                    # SSH 连接用户名
    IdentityFile {{ backup_ssh_key_path }}                                     # SSH 私钥文件路径
    IdentitiesOnly yes                                                          # 仅使用指定的身份文件
    StrictHostKeyChecking {{ backup_ssh_strict_host_checking | default('yes') }}  # 严格主机密钥检查
    UserKnownHostsFile {{ backup_ssh_known_hosts | default('/root/.ssh/known_hosts') }}  # 已知主机文件路径
    ServerAliveInterval {{ backup_ssh_keepalive | default(60) }}               # 服务器存活检测间隔（秒）
    ServerAliveCountMax {{ backup_ssh_keepalive_count | default(3) }}           # 最大存活检测失败次数
    ConnectTimeout {{ backup_ssh_timeout | default(30) }}                      # 连接超时时间（秒）
    BatchMode yes                                                               # 批处理模式，禁用交互式提示
    
    # 安全设置 - 使用强加密算法确保传输安全
    Protocol 2                                                                  # 使用 SSH 协议版本 2
    Ciphers {{ backup_ssh_ciphers | default('chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr') }}  # 支持的加密算法列表
    MACs {{ backup_ssh_macs | default('hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512') }}  # 消息认证码算法列表
    KexAlgorithms {{ backup_ssh_kex | default('curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512') }}  # 密钥交换算法列表
    
    # 压缩设置 - 减少网络传输数据量
    Compression {{ backup_ssh_compression | default('yes') }}                  # 启用数据压缩
    CompressionLevel {{ backup_ssh_compression_level | default(6) }}           # 压缩级别（1-9）
    
    # 日志设置
    LogLevel {{ backup_ssh_log_level | default('INFO') }}                      # SSH 连接日志级别
{% endif %}

{% if backup_remote_servers is defined and backup_remote_servers | length > 0 %}
# 额外的远程服务器配置 - 支持多个备份目标服务器
{% for server in backup_remote_servers %}
Host {{ server.name | default('backup-' + loop.index | string) }}
    HostName {{ server.host }}                                                 # 服务器主机名或IP地址
    Port {{ server.port | default(22) }}                                       # SSH 连接端口号
    User {{ server.user | default('backup') }}                                 # SSH 连接用户名
    IdentityFile {{ server.key_path | default(backup_ssh_key_path) }}          # SSH 私钥文件路径
    IdentitiesOnly yes                                                          # 仅使用指定的身份文件
    StrictHostKeyChecking {{ server.strict_host_checking | default('yes') }}   # 严格主机密钥检查
    ServerAliveInterval {{ server.keepalive | default(60) }}                   # 服务器存活检测间隔（秒）
    ServerAliveCountMax {{ server.keepalive_count | default(3) }}               # 最大存活检测失败次数
    ConnectTimeout {{ server.timeout | default(30) }}                          # 连接超时时间（秒）
    BatchMode yes                                                               # 批处理模式，禁用交互式提示
    Protocol 2                                                                  # 使用 SSH 协议版本 2
    Compression {{ server.compression | default('yes') }}                      # 启用数据压缩
    LogLevel {{ server.log_level | default('INFO') }}                          # SSH 连接日志级别
{% endfor %}
{% endif %}

# =============================================================================
# 全局 SSH 设置 - 适用于所有备份操作的默认配置
# =============================================================================
Host *
    # 安全设置 - 确保连接安全性
    Protocol 2                                                                  # 使用 SSH 协议版本 2
    StrictHostKeyChecking ask                                                   # 询问是否接受未知主机密钥
    VerifyHostKeyDNS yes                                                        # 通过 DNS 验证主机密钥
    
    # 性能设置 - 优化连接性能和稳定性
    TCPKeepAlive yes                                                            # 启用 TCP 保活机制
    ServerAliveInterval 60                                                      # 服务器存活检测间隔（秒）
    ServerAliveCountMax 3                                                       # 最大存活检测失败次数
    
    # 禁用不必要的功能 - 减少安全风险和资源消耗
    ForwardAgent no                                                             # 禁用 SSH 代理转发
    ForwardX11 no                                                               # 禁用 X11 转发
    ForwardX11Trusted no                                                        # 禁用受信任的 X11 转发
    PermitLocalCommand no                                                       # 禁用本地命令执行
    
    # 日志设置
    LogLevel ERROR                                                              # 仅记录错误级别的日志